/* list.h -- header file for a simple list type */
#ifndef LIST_H_
#define LIST_H_
#include <stdbool.h>     /* C99 feature         */

#include<taskinfo.h>

/* program-specific declarations */

#define TSIZE      45    /* size of array to hold title  */


/* general type definitions */

typedef Taskinfo Item;

typedef struct node
{
    Item item;
    struct node * next;
} Node;

typedef Node * List;

/* function prototypes */

/* operation:        initialize a list��ʼ���б�         */
/* preconditions:    plist points to a list                     */
/* postconditions:   the list is initialized to empty           */
void InitList(void);

/* operation:        determine if list is emptyȷ���б��Ƿ�Ϊ��      */
/*                   plist points to an initialized list        */
/* postconditions:   function returns True if list is empty     */
/*                   and returns False otherwise                */
bool ListIsEmpty(void); 

/* operation:        determine if list is fullȷ���б��Ƿ�����        */
/*                   plist points to an initialized list        */
/* postconditions:   function returns True if list is full      */
/*                   and returns False otherwise                */
//bool ListIsFull(const List *plist);

/* operation:        determine number of items in list  ȷ���б�����Ŀ�ĸ���*/
/*                   plist points to an initialized list        */
/* postconditions:   function returns number of items in list   */
unsigned int ListItemCount(void);

/* operation:        add item to end of list     ���б�β����һ����Ŀ*/
/* preconditions:    item is an item to be added to list        */
/*                   plist points to an initialized list        */
/* postconditions:   if possible, function adds item to end     */
/*                   of list and returns True; otherwise the    */
/*                   function returns False                     */
bool AddItem(Item *item);

/*��һ�����������б��е�ÿ����Ŀ*/
/* operation:        apply a function to each item in list   */
/*                   plist points to an initialized list        */
/*                   pfun points to a function that takes an    */
/*                   Item argument and has no return value      */
/* postcondition:    the function pointed to by pfun is         */
/*                   executed once for each item in the list    */
void Traverse (void (* pfun)(Item *item) );

//找到链表中index的taskinfo
int GetTaskinfoByFilename(Taskinfo *taskinfo, char *filename);

//从链表中删除内容
int RemoveListItem(Taskinfo *taskinfo);

/* operation:        free allocated memory, if any�ͷ��ڴ�              */
/*                   plist points to an initialized list        */
/* postconditions:   any memory allocated for the list is freed */
/*                   and the list is set to empty               */
void EmptyTheList(void);

#endif


